repo: Fix object list keys ownership
authorDan Nicholson <nicholson@endlessm.com>
Wed, 21 Dec 2016 11:59:08 +0000 (05:59 -0600)
committerAtomic Bot <atomic-devel@projectatomic.io>
Thu, 22 Dec 2016 16:07:52 +0000 (16:07 +0000)
ostree_object_name_serialize returns a floating ref, so sink it before
adding it to the hash table so it can properly be freed later when the
hash table is destroyed.

This is particularly a problem for pygobject, which sinks the refs on
variants as it marshals them to native python types. If the ref isn't
already sunk, then the ref count won't increase and a critical warning
will be raised when both the hash table and pygobject try to unref it.

Closes: #635
Approved by: cgwalters

src/libostree/ostree-repo.c

index 92de1ed501ae13c6d5255c1cb7ede2c2c4c21de9..35136c763a70304eb2108602f4ab55569ca15283 100644 (file)
@@ -2460,7 +2460,7 @@ list_loose_objects_at (OstreeRepo             *self,
       value = g_variant_new ("(b@as)",
                              TRUE, g_variant_new_strv (NULL, 0));
       /* transfer ownership */
-      g_hash_table_replace (inout_objects, key,
+      g_hash_table_replace (inout_objects, g_variant_ref_sink (key),
                             g_variant_ref_sink (value));
     }